package parsing;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.jsoup.Jsoup;
import org.jsoup.examples.HtmlToPlainText;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import patterns.IPattern;

/**Класс реализующий интерфейс IParser.
 *
 * @author Версанов Кирилл
 */
public class Parsing implements IParser {

    public Parsing() {};
    
    private void searchPatterns(IPattern p) {
        patterns = p.getPatterns();
        if (patterns.isEmpty())
            log.error("Шаблон пуст!Введите другой шаблон.");
        for (Pattern pattern : patterns) {
            Matcher matcher = pattern.matcher(str);
            while (matcher.find()) {
                log.info(matcher.group(1) + ":" + " " + matcher.group(2));
            }
        }
    }
    /**Парсинг сайта http://hotline.ua/;
     * @param url гиперссылка страницы с данными.
     * @param pattern шаблон регулярных выражений.      
     */
    @Override
    public void parseHotLineUa(String url, IPattern pattern) {
        try {
            doc = Jsoup.connect(url).get();
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        Element table = doc.select("table.th-info").first();
        
        Iterator<Element> ite = table.select("tr").iterator();
        while (ite.hasNext()) {
            str.append(ite.next().text()).append("\n");
        }
        log.info(doc.title());
        searchPatterns(pattern);
        str.setLength(0);
        log.info("====================================");
    }
    /**Парсинг сайта http://www.nvidia.ru/;
     * @param url гиперссылка страницы с данными.
     * @param pattern шаблон регулярных выражений.      
     */
    @Override
    public void parseInvidiaRu(String url, IPattern pattern) {
        try {

            doc = Jsoup.connect(url).get();

        } catch (IOException ex) {
            ex.printStackTrace();
        }

        Element el1 = doc.select("div.specBox.left").first();
        Element el2 = doc.select("div.specBox.right").first();
        log.info(doc.title());
        Iterator<Element> iter = el1.select("tr").iterator();
        while (iter.hasNext()) {
            str.append(iter.next().text()).append("\n");
        }
        searchPatterns(pattern);
        str.setLength(0);
        Iterator<Element> ite = el2.select("tr").iterator();
        while (ite.hasNext()) {
            str.append(ite.next().text()).append("\n");
        }
        searchPatterns(pattern);
        log.info("====================================");
        str.setLength(0);
    }
    /**Парсинг сайта http://dx.com/;
     * @param url гиперссылка страницы с данными.
     * @param pattern шаблон регулярных выражений.      
     */
    @Override
    public void parseDx(String url, IPattern pattern) {
        try {

            doc = Jsoup.connect(url).get();

        } catch (IOException ex) {
            ex.printStackTrace();
        }

        Element el1 = doc.select("div.infoContainer").first();
        log.info(doc.title());
        Iterator<Element> iter = el1.select("tr").iterator();
        while (iter.hasNext()) {
            str.append(iter.next().text()).append("\n");
        }
        searchPatterns(pattern);
        log.info("====================================");
        str.setLength(0);
    }
    private Document doc = null;
    private static final Logger log = Logger.getLogger(Parsing.class);
    private List<Pattern> patterns;
    private StringBuilder str = new StringBuilder();
}
